2390 VTAB 17: POKE HT,0: PRINT "Dots per inch = ";DI;
2400 IF FIRST THEN TEXT :Q$ = "Is this OK? ": GOSUB 14000: ON OK GOTO 2700:FIRST = 0:EFLAG% = 1:A$(O,P) = "":B$(O,P) = NN$: VTAB 24: POKE HT,1: PRINT "Type the exact control characters required (^ = End):";: GOTO 2270
2410 GOSUB 10000: IF K = 94 THEN & TEXT A$(O,P) TO B$(O,P): GOTO 2700
2420 A$(O,P) = A$(O,P) + CHR$(K)
2430 & TEXT A$(O,P) TO B$(O,P)
2440 GOTO 2310
2699 REM <CTRL-J><CTRL-J>Edit dots/inch<CTRL-J>
2700 TEXT
2710 IF O = 36 OR O = 37 THEN 2860
2720 IF O >21 THEN 2000
2730 Q$ = "Are dots/inch and dots/char values OK? ": GOSUB 14000: ON OK GOTO 2000
2740 & STORE DPI$(P) AT 768
2750 VTAB 24: POKE HT,0: CALL -868: PRINT "Enter the new values (see your printer manual's technical specifications)";
2760 FOR I = 1 TO 0 STEP -1
2770 C = 0:B$ = ""
2780 VTAB 17 -I: POKE HT,26 +C: GET A$
2790 ON A$ = CHR$(8) GOTO 2770: ON A$ = CHR$(13) GOTO 2820: ON (A$ <"0" OR A$ >"9") GOTO 2780
2800 EFLAG% = 1
2810 PRINT A$;" ";:B$ = B$ +A$:C = C +1: ON C <4 GOTO 2780
2820 ON C = 0 GOTO 2840: IF VAL(B$) >255 THEN ER = 9: GOSUB 40260: VTAB 16: POKE HT,26: PRINT DC;" ";: GOTO 2770
2825 POKE 768 +O +4 +I *25, VAL(B$)
2830 & GET DPI$(P) AT 768
2840 NEXT
2850 GOTO 2000
2860 Q$ = "Is the dots/inch value OK? ": GOSUB 14000: ON OK GOTO 2000
2870 & STORE DPI$(P) AT 768
2880 VTAB 24: POKE HT,0: CALL -868: PRINT "Enter the new value (see your printer manual's technical specifications)";
2890 C = 0:B$ = ""
2900 VTAB 17: POKE HT,26 +C: GET A$
2910 ON A$ = CHR$(8) GOTO 2890: ON A$ = CHR$(13) GOTO 2940: ON (A$ <"0" OR A$ >"9") GOTO 2900
2920 EFLAG% = 1
2930 PRINT A$;" ";:B$ = B$ +A$:C = C +1: ON C <4 GOTO 2900
2940 ON C = 0 GOTO 2960: IF VAL(B$) >255 THEN ER = 9: GOSUB 40260: VTAB 17: POKE HT,26: PRINT DI;" ";: GOTO 2930
2945 POKE 768 +O -34, VAL(B$)
2950 & GET DPI$(P) AT 768
2960 GOTO 2000
3099 REM <CTRL-J><CTRL-J>Edit UL method<CTRL-J>
3100 IF UL(P) >3 THEN VTAB 9: INVERSE : PRINT " ";B$(O,P);" ": NORMAL : VTAB 12: PRINT "Sorry, you can't change this option for this printer.": GOSUB 10000: GOTO 2000
5260 IF P = 2 OR P = 10 THEN FOR I = 1 TO 37: PRINT ".";: NEXT : GOTO 5450
5270 A = BU +FX
5280 X = PEEK(A -1): & STORE DPI$(P) AT A -1: POKE A -1,X
5290 X = PEEK(A +57): & STORE ZERO$ AT A +57: POKE A +57,X
5300 IN = 136
5310 FOR O = 1 TO 37
5320 PRINT ".";
5330 IF NOT LEN(A$(O,P)) THEN 5370
5340 & STORE A$(O,P) AT A +IN
5350 & POKE A +56 +O *2,IN
5360 IN = IN + LEN(A$(O,P)) +1
5370 NEXT O
5380 & POKE BU +FX +132,PP(P)
5390 POKE BU +FX +134,UL(P)
5400 POKE BU +FX +135,UK(P)
5410 & POKE BU +932 +P *2,FX: REM - Update pointer
5420 IF P = 1 THEN & POKE BU +932 +4,FX: REM - ImageWriter = DMP
5430 IF P = 3 THEN & POKE BU +932 +20,FX: REM - Qume 11 = DWP
5440 FX = FX +IN
5450 NEXT P
5460 IF FX <3382 THEN 5800: REM - Make sure there's enough room
5470 VTAB 18: PRINT : PRINT SPC( 5);: INVERSE : PRINT " You have ";:FX -3381;" too many characters in your control codes. ": NORMAL : GOSUB 10000: GOTO 1000
5799 REM <CTRL-J><CTRL-J>Save to disk<CTRL-J>
5800 DFLT = DZ:LBL$ = " Save SEG.PR"
5810 GOSUB 7000: IF RSLT = 0 THEN 1000
5820 DZ = RSLT: IF RSLT >ND THEN GOSUB 8000: GOTO 5850
5830 & READ PTH$ AT UNIT(RSLT)
5840 PTH$ = "/" +PTH$ +"/"
5850 PRINT D$;"VERIFY";PTH$
5860 SEG$ = PTH$ +"SEG.PR"
5870 PRINT D$;"VERIFY";SEG$
5880 POKE 32,10: POKE 33,50: POKE 34,8: POKE 35,ND +12: HOME : TEXT
12040 ON K = 10 GOTO 12050: ON K = 11 GOTO 12070: ON K = 13 GOTO 12090: ON K = 27 GOTO 12100: ON XX AND OA AND (K = 80 OR K = 112) GOTO 12110: GOTO 12020
14010 VTAB 24: POKE HT,1: CALL -868: PRINT Q$;: IF NOT OK THEN INVERSE
14020 PRINT " No ";: NORMAL : IF OK THEN INVERSE
14030 PRINT " Yes ";: NORMAL
14040 GOSUB 10000: ON K = 8 GOTO 14050: ON K = 21 GOTO 14060: ON K = 78 OR K = 110 GOTO 14070: ON K = 27 OR K = 89 OR K = 121 GOTO 14080: ON K = 13 GOTO 14090: GOTO 14040
14050 OK = 0: GOTO 14010
14060 OK = 1: GOTO 14010
14070 OK = 0: RETURN
14080 OK = 1: RETURN
14090 RETURN
15999 REM <CTRL-J><CTRL-J>Get disk device list from ProDOS<CTRL-J>
16000 ND = PEEK(48945) +1
16010 FOR DV = 1 TO ND
16020 U = PEEK(48945 +DV)
16030 U(DV) = U
16040 D(DV) = 1: IF U >127 THEN D(DV) = 2:U = U -128
16050 S(DV) = INT(U/16)
16060 T(DV) = U -S(DV) *16
16070 V(DV) = T(DV) *100 -S(DV) *10 +D(DV)
16080 I(DV) = DV
16090 NEXT DV
16100 REM - Now sort list by type, slot, drive
16110 SRT = 0
16120 FOR J = 1 TO ND -1
16130 IF V(I(J)) >V(I(J +1)) THEN K = I(J):I(J) = I(J +1):I(J +1) = K:SRT = 1